Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
Інститут дистанційного навчання
Кафедра СКС
КУРСОВА РОБОТА
з дисципліни «Програмування»
на тему «Класи. Бінарні дерева»
Варіант № 23
Завдання на курсову роботу:
Провести огляд класів, доступу до полів та методів класу, статичних членів класу, реалізації механізмів успадкування та поліморфізму в С++, доступу до базових класів, друзів класу, шаблонів класів, перевантаження операторів для класів, а також бінарних дерев, що широко застосовуються у програмуванні. Розглянути їх властивості і практичне значення.
Згенерувати три масиви з випадковими елементами типу Integer довжиною 100, 1000 та 10000 елементів, відповідно.
Відсортувати одержані масиви за збільшенням елементів, визначивши при цьому такі параметри:
кількість порівнянь;
кількість обмінів;
фактичний час роботи,
необхідні кожній з програм (простий та один з довершених методів), щоби відсортувати кожен з трьох масивів.
ЗМІСТ
1.
Динамічний розподіл пам’яті…………………………………………...
4
2.
Доступ до полів та методів класу. Статичні члени класу…………….
5
3.
Реалізація механізмів успадкування та поліморфізму в С++. Доступ до базових класів………………………………………………………..
7
4.
Друзі класу……………………………………………………………….
10
5.
Шаблони класів………………………………………………………….
12
6.
Перевантаження операторів для класів………………………………...
14
7.
Бінарні дерева……………………………………………………………
15
8.
Практична реалізація простих методів сортування…………………..
22
Висновки……………………………………………………………………….
29
Список використаної літератури……………………………………………..
30
1. ДИНАМІЧНИЙ РОЗПОДІЛ ПАМ’ЯТІ
Для більш ефективного використання пам’яті часто доводиться розроблювати класи, в яких розмір об’єкту залежить від даних, що в ньому зберігаються. В таких структурах часто об’єм потрібної пам’яті стає відомим лише безпосередньо перед ініціалізацією конкретного об’єкта даного класу. Це призводить до необхідності динамічного керування пам’яттю. Для цих цілей в С++ передбачено два оператори new та delete. Оператор new дозволяє виділити пам’ять об’єкту, оператор delete дозволяє звільнити пам’ять Динамічний розподіл пам’яті вимагає використання покажчиків.
Розглянемо приклади.
Динамічне виділення пам’яті під одновимірний масив
float* y;
y=new float [5];
Очищення пам’яті, виділеної динамічно під одновимірний масив
delete y;
Динамічне виділення пам’яті під двовимірний масив
float** y;
y=new float* [5];
for(i=0;i<5;i++) {y[i]= new float[5] };
Очищення пам’яті, виділеної динамічно під двовимірний масив
for(i=0;i<5;i++) {delete y[i] };
delete y;
Зрозуміло, що оператор new використовується в конструкторі, а оператор delete в деструкторі. Розглянемо приклад.
Нехай нам потрібен клас одновимірний вектор, розмір якого визначається у момент ініціалізації. Такий клас повинен мати конструктор з параметром, що вказує на розмір вектора та конструктор за замовчуванням, щоб не виникали аварійні ситуації при ініціалізації без параметрів. Будемо вважати, що за замовчуванням наш вектор буде тривимірним. Щоб не ускладнювати приклад в описі класу покажемо лише конструктори та деструктори, а інші необхідні методи не показуватимемо.
class MyVector
{
private:
float *v;
int size;
public:
MyVector(){size=3; v= new float[size];}; //конструктор за замовчуванням
MyVector(int a) {size= a; v= new float[size];}; //конструктор з параметром
~MyVector(){delete[] v;};//деструктор
...
};
2. ДОСТУП ДО ПОЛІВ ТА МЕТОДІВ КЛАСУ.
СТАТИЧНІ ЧЛЕНИ КЛАСУ
Доступ до відкритих полів та методів класу здійснюється прямим зверненням, з використанням операторів прямого і непрямого вибору, як в структурах і об'єднаннях.
Оператор прямого вибору – це точка „.”. Оператор непрямого вибору – це спеціальний символ, що складається з мінуса та знаку більше „->”. Оператор прямого вибору використовується тоді, коли доступ до об’єкту класу у рограмі виконується безпосередньо. Оператор непрямого (опосередкованого) вибору використовується, коли доступ до об’...